function add (a, b, c) {
  return a + b + c
}
function curry (func) {
  const len = func.length
  return function cur(...args) {
    // 实参个数大于形参个数，说明不需要克里化.这也是最终需要达到的状态
    if (args.length >= len) {
      return func(...args)
    }

    // 实参个数小于形参个数，说明需要克里化了，实现方式是一个递归
    return function (...args2) {
      // 将以前的参数，现在的参数都放到cur 中，也就是返回的那个函数中去执行
      return cur(...args, ...args2)
    }
  }
}

var resultFun = curry(add)
console.log(resultFun)
console.log(resultFun(1)(2)(3))
